package com.cqc.jdk8.Jutil.concurrent.locks.ReentrantLock.demo2;


import java.util.concurrent.TimeUnit;

/**
 * ReentrantLock 是显式的加锁和释放锁，lock.lock()， lock.unlock()
 */
public class ThreadTest {
    /**
     * ReentrantLock和 synchronized的区别
     * 1 ReentrantLock 是显式的 加锁、释放锁，synchronized 是隐式的，是jvm层面的
     * 2 ReentrantLock 可以尝试获取锁 tryLock()，synchronized 没有
     * 3 ReentrantLock Condition.await()会释放锁，而 synchronized 必须执行完才会释放锁
     * 4 ReentrantLock 是java代码实现的锁，synchronized 是关键字是jvm层面的锁
     */
    public static void main(String[] args) throws InterruptedException {
        Counter counter = new Counter();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                counter.add();
            }).start();

        }
        TimeUnit.SECONDS.sleep(1);
        System.out.println(counter.getCount());
    }
}
